iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
Mobile Development

自己的 app 自己寫系列 第 12

[Day12] 維運到底是不是好工作

  • 分享至 

  • xImage
  •  

開始前先看看兩個 swift 的小概念:

  • subclass:簡單來說就是繼承既有類別(然後有可能擴建,overwrite 原本的 function 或加入一些新 function)的類別,像是 class newClass: oldClass 這種模式的寫法
  • priciple class: 指定 app 的 entry point,設定方式大概像這樣:
<key>NSPrincipalClass</key>
<string>MyClassName</string>

為什麼在開始之前要講這些呢,因為 DeviceActivityMonitor 這個 class 的文檔上寫著,開發者應該要 subclass DeviceActivityMonitor 然後把這個指定為 principle class。也就是說,這個 class 應該要成為我們整個 app 的 entry point。

而如果要使用螢幕時間限制的話,則用 ManagedSettings 裡面的 ManagedSettingsStore() 去做設置。

再往下看的話有幾個屬性可以了解一下:

@objc open class DeviceActivityMonitor : NSObject {
    ...
}
  • @objc 表示這個 class 可以在 objective-c 環境下使用
  • open 是 swift 中關於訪問權限的設置,全部的選項包含 private, fileprivate, internal, public, open。像這裡 open 表示這個 class 可以被 subclass 並複寫
  • NSObject 是 objective-c 的 root class

底下有幾個 method:

@objc open class DeviceActivityMonitor : NSObject {
    open func intervalDidStart(for activity: DeviceActivityName)
    open func intervalDidEnd(for activity: DeviceActivityName)
    open func intervalWillStartWarning(for activity: DeviceActivityName)
    open func intervalWillEndWarning(for activity: DeviceActivityName)
}

會有被排程監控的時間段,intervalDidStart 和 intervalDidEnd 就是分別在 interval 開始&結束的時候會被調用。而 intervalWillStartWarning 和 intervalWillEndWarning 則是在即將開始&即將結束時去通知寫這些東西的 app。

我自己的猜測是,當打開一個新的 app 時,會是即將開始(在背景準備一些東西,像是遊戲加載)--> 開始 --> 即將結束(開始關掉一些東西並清理資源) --> 真正結束,而這四個 function 可能就是在這些時間點去通知監控的 app 有這些事情要發生。不過這邊也沒有研究得太深入,有錯歡迎指正感激不盡 QQ


上一篇
[Day11] 開源的友誼在世仇面前能撐住嗎
下一篇
[Day13] 早起的鐵人沒有蟲吃
系列文
自己的 app 自己寫13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言